﻿#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>
#include<stdlib.h>

//给你一个整数n，输出n∗n的蛇形矩阵。
//1 2 6 7
//3 5 8 13
//4 9 12 14
//10 11 15 16

int main() {
    int n = 0;
    scanf("%d", &n);
    int i = 0;
    int j = 0;
    int count = 0;//这里count为每个数据下标i与j的和就存数据
    int num = 1;//这里num++为升序的每次要放的数据
    int arr[100][100] = { 0 };
   /* int(*arr)[n] = (int(*)[n])malloc(sizeof(int) * n * n);*///这里为了节约利用空间，定义了数组指针来开辟二维数组空间
    while (count <= 2 * n - 2) {
        for (i = 0; i < n; i++) {
            for (j = 0; j < n; j++) {
                if (i + j == count) {
                    if (count % 2 == 0) {//i+j为偶数，则斜向上走，这里考虑到如果直接打印i和j，他会从头开始i j重新遍历，可能会存在大数比小数先遍历到故先放小数故先j 后i
                        arr[j][i] = num;
                        num += 1;
                    }
                    else {//i+j为奇数，则斜向下走
                        arr[i][j] = num;
                        num += 1;

                    }
                }
            }
        }

        //这里我们要填入的数据就是i+j为count的，根据由于n取值不同count也就不同来找对应的i与j，遍历整个i j找到符合要求的按蛇身顺序放入，每次遍历完ij就count++
        count++;//这里count最大就是i+j的最大即2n-2
    }
    //打印矩阵
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}


